package regexp;

import regexp.utils.RegExpFind;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author DCSGO
 * @version 1.0
 */
public class Regexp13 {
    public static void main(String[] args) {
        //经典的结巴程序
        //把类似:"我....我要...学学学学....编程java!";
        //通过正则表达式修改成"我要学编程java!"
        String content = "我....我要...学学学学....编程java!";
        //去掉所有 . 号
        String regStr = "\\.*";
        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        String newStr = matcher.replaceAll("");
        System.out.println(newStr);
        //相邻字符相同的所有子串 仅保留一个
        RegExpFind.printFind(newStr, "(.)(?=\\1)");
        Pattern pattern1 = Pattern.compile("(.)(?=\\1)");

        Matcher matcher1 = pattern1.matcher(newStr);
        String finalStr = matcher1.replaceAll("");
        System.out.println(finalStr);
        /*
         * 我我要学学学学编程java!
         * (.)(?=\1)匹配到：
         * 我 学 学 学
         * 我要学编程java!
         *
         * 进程已结束，退出代码为 0
         */
        System.out.println(removeStuttering("我....我要...学学学学....编程java!"));
        //我要学编程java!
    }

    public static String removeStuttering(String str) {
        //1.去掉字符串中的 . 号
        String ans = Pattern.compile("\\.").matcher(str).replaceAll("");
        //2.通过外部反向引用将所有重复字符替换为其对应的外部引用所指向的字符
        return Pattern.compile("(.)\\1+").matcher(ans).replaceAll("$1");
    }
}
